/**
 * 存储鼠标状态的对象，包含鼠标的 x 和 y 坐标以及鼠标按下状态。
 */
let MOUSE = {x: 0, y: 0, down: 0};
/**
 * 鼠标移动事件处理函数，更新鼠标的位置。
 * @param {MouseEvent} event - 鼠标移动事件对象。
 */
onmousemove = event => {
    getEventPosition(event, can, MOUSE);
};

/**
 * 鼠标按下事件处理函数，更新鼠标的按下状态。
 * @param {MouseEvent} e - 鼠标按下事件对象。
 */
onmousedown = e => {
    MOUSE.down = true;
};

/**
 * 鼠标释放事件处理函数，更新鼠标的按下状态。
 * @param {MouseEvent} e - 鼠标释放事件对象。
 */
onmouseup = e => {
    MOUSE.down = false;
};

/**
 * 右键菜单事件处理函数，阻止默认的右键菜单弹出。
 * @param {MouseEvent} event - 右键菜单事件对象。
 */
oncontextmenu = (event) => event.preventDefault();

/**
 * 获取鼠标在画布上的位置，并将结果存储在指定对象中。
 * @param {MouseEvent} event - 鼠标事件对象。
 * @param {HTMLCanvasElement} can - 画布元素。
 * @param {Object} out - 用于存储鼠标位置的对象。
 */
getEventPosition = (event, can, out) => {
    if (!can) return;
    const canvasRect = can.getBoundingClientRect();
    out.x = (event.pageX - canvasRect.left) / canvasRect.width * can.width;
    out.y = (event.pageY - canvasRect.top) / canvasRect.height * can.height;
}
